package atom.loader.types {
	
	import atom.loader.core.AbstractLoader;
	import atom.loader.types.AssetLoader;
	import atom.loader.ILoader;
	import atom.loader.IAsset;
	import flash.events.Event;
	import flash.events.HTTPStatusEvent;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	
	/**
	 * Carga el echo de una URL determinada y permite acceder a su contenido crudo.
	 * 
	 * 
	 * Una idea pendiente a diseñar es un modelo de parsers del cual esta pueda heredar o componerse,
	 * para poder acceder a la data ya parseada conociendo su estado original mediante el contentType.
	 * 
	 * Ej. getXML(), getObject(), getJSON(), etc.
	 * 
	 * @author Jorge Braccini
	 */
	public class AssetData extends AssetLoader implements ILoader, IAsset {
		
		private var _loader:URLLoader;
		
		public function AssetData(id:String, url:String = null) {
			super(id, url);
			init();
		}
		
		/* INTERFACE ar.com.jbraccini.loader.ILoader */
		
		override public function load():void {
			_loader.load(_url);
		}
		
		override public function cancel():void {
			_loader.close();
		}
		
		override public function reload():void {
			_loader.load(_url);
		}
		
		override public function get contentType():String { return AssetTypes.TEXT; }
		
		override public function get content():* { return _loader.data; }
		
		
		
		/* INTERFACE ar.com.jbraccini.IDestroyable */
		
		override public function destroy():void {
			cancel();
			clean();
			init();
		}
		
		override protected function init():void {
			super.init();
			
			_loader = new URLLoader();
			_loader.addEventListener(Event.COMPLETE, redispatch);
			_loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, redispatch);
			_loader.addEventListener(IOErrorEvent.IO_ERROR, redispatch);
			_loader.addEventListener(ProgressEvent.PROGRESS, redispatch);
		}
		
		private function clean():void {
			_loader.removeEventListener(Event.COMPLETE, redispatch);
			_loader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, redispatch);
			_loader.removeEventListener(IOErrorEvent.IO_ERROR, redispatch);
			_loader.removeEventListener(ProgressEvent.PROGRESS, redispatch);
		}
		
	}

}